package com.cjm.algorithm.leetcode;

import java.util.HashMap;
import java.util.Map;

/**
 * 对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
 * 然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
 * 如果这个过程 结果为 1，那么这个数就是快乐数。
 * 如果 n 是 快乐数 就返回 true ；不是，则返回 false 。
 */
public class IsHappy202 {
    public static boolean isHappy(int n) {
        String s = String.valueOf(n);
        Map<String, Integer> map = new HashMap<>();
        while (!map.containsKey(s)) {
            map.put(s, 1);
            char[] chars = s.toCharArray();
            long rest = 0;
            for (int i = 0; i < chars.length; i++) {
                char aChar = chars[i];
                int i1 = Integer.parseInt(String.valueOf(aChar));
                rest = rest + ((long) i1 * i1);
            }
            if (rest == 1) {
                return true;
            }
            s = String.valueOf(rest);
        }
        return false;
    }

    public static void main(String[] args) {
        System.err.println(isHappy(2));
    }
}
